本文共 1228 字,大约阅读时间需要 4 分钟。
通过显示用户头像, 我们可以进一步改进资料页面的外观。
class User(UserMixin, db.Model): avatar_hash = db.Column(db.String(32)) #1 def __init__(self, **kwargs): super(User, self).__init__(**kwargs) #... self.avatar_hash = hashlib.md5(self.email.encode('utf-8')).hexdigest() #1 def change_email(self, new_email): #2 self.email = new_email self.avatar_hash = hashlib.md5(self.email.encode('utf-8')).hexdigest() db.session.add(self) return True def gravatar(self, size=100, default='identicon', rating='g'): if request.is_secure: url = 'https://secure.gravatar.com/avatar' else: url = 'http://www.gravatar.com/avatar' hash = self.avatar_hash or hashlib.md5(self.email.encode('utf-8')).hexdigest() #1 return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(url=url, hash=hash, size=size, default=default, rating=rating)
#1
计算email的hash值是一项CPU密集型操作, 如果在某个页面生成大量头像, 计算量会非常大。因此我们在User表中增加一avatar_hash属性, 在构造函数中对用户的avatar_hash进行赋值, 以后调用gravatar生成hash的时候, 先从数据库中查找用户的avatar_hash, 如果没有再计算, 会节省很多计算量。
#2
我们添加修改email的函数change_email, 用户改完email后, 需要修改avatar_hash。
我们在导航条添加了头像的缩略图, 原理跟标题二相似。